//该文件是对axios的二次封装
//目的是为了让整个项目发送ajax请求时，通用的配置不用一遍遍的重复写

//1.引入axios模块
import axios from 'axios'
import NProgress from 'nprogress' //引入进度条模块
import 'nprogress/nprogress.css' //引入进度条样式
 import {getUserTempId} from '../utils/getUserTempId' //临时身份ID
 import store from '../store'

//2.创建axios实例对象 以后整个项目都用这个实例发送请求
const ajax = axios.create({
    baseURL:'/api',//请求的基本路径
    timeout:10000,//设置超时时间
})

//3.设置请求拦截器  在请求发送之前执行里面的逻辑
ajax.interceptors.request.use(config=>{
    NProgress.start() //设置进度条的开始
    config.headers.userTempId = getUserTempId()
    
    //从store中拿token，不要忘记user，如果有token，那么发请求时候把token加到请求头一起发给服务器
    let token = store.state.user.token
    if(token){
        config.headers.token = token
    }
    
  
  
   

     return config //返回配置项，这个config里面包含请求的一些配置信息
})

//4.设置响应拦截器
ajax.interceptors.response.use(response=>{
    NProgress.done() //设置进度条的结束
     return  response.data
},err=>{
    NProgress.done() //设置进度条的结束

    //alert('发送ajax请求失败'+ err.message) 

    // 这里其实是影响axios调用后返回的promise的状态及结果
  // 返回失败的promise,那么这个错误信息就会继续往后传，传到我们调用axios之后promise对象的.then
  // 后续我们可以继续去处理这个错误
      return  Promise.reject(new Error(err.message))

     //中断promise链
     //返回pending状态的promise就可以中断promise链，后面就不需要处理了
     //return new Promise(()=>{})
})

//5.导出对象
export default ajax